From d78b4995350e97da01c7f47fb565b5207ee6c645 Mon Sep 17 00:00:00 2001 From: "iap10@labyrinth.cl.cam.ac.uk" Date: Fri, 4 Feb 2005 00:01:54 +0000 Subject: [PATCH] bitkeeper revision 1.1159.241.1 (4202bb72zRYg-QWeXrkKfXwmuL5I3A) Add checking ISA DMA flag in cpu_loop. Also need to do bios_init manually for now. With this change, floppy is functional. Signed-off-by: Yunhong Jiang Signed-off-by: Arun Sharma Signed-off-by: ian.pratt@cl.cam.ac.uk --- tools/ioemu/iodev/cpu.cc | 4 ++++ tools/ioemu/iodev/dma.cc | 9 +++++++++ tools/ioemu/iodev/dma.h | 1 + 3 files changed, 14 insertions(+) diff --git a/tools/ioemu/iodev/cpu.cc b/tools/ioemu/iodev/cpu.cc index 5d8c09a342..17a85539ce 100644 --- a/tools/ioemu/iodev/cpu.cc +++ b/tools/ioemu/iodev/cpu.cc @@ -213,6 +213,10 @@ bx_cpu_c::cpu_loop(int max_instr_count) #endif interrupt(vector); } + /* we check DMA after interrupt check*/ + while(BX_HRQ){ + DEV_dma_raise_hlda(); + } if (send_event) { int ret; diff --git a/tools/ioemu/iodev/dma.cc b/tools/ioemu/iodev/dma.cc index 9b99bad5f5..afe0238a92 100644 --- a/tools/ioemu/iodev/dma.cc +++ b/tools/ioemu/iodev/dma.cc @@ -182,6 +182,14 @@ bx_dma_c::init(void) } BX_DMA_THIS s[1].chan[0].used = 1; // cascade channel in use BX_INFO(("channel 4 used by cascade")); + bios_init(); +} + +/* Remove it when guest fw ready*/ + void +bx_dma_c::bios_init(void){ + BX_DMA_THIS s[1].mask[0] = 0; // unmask cascade channel + BX_DMA_THIS s[1].chan[0].mode.mode_type = 3; // cascade mode for channel 4 } void @@ -189,6 +197,7 @@ bx_dma_c::reset(unsigned type) { reset_controller(0); reset_controller(1); + bios_init(); } void diff --git a/tools/ioemu/iodev/dma.h b/tools/ioemu/iodev/dma.h index 90ac9da707..9f6c4eb60e 100644 --- a/tools/ioemu/iodev/dma.h +++ b/tools/ioemu/iodev/dma.h @@ -46,6 +46,7 @@ public: ~bx_dma_c(void); virtual void init(void); + virtual void bios_init(void); virtual void reset(unsigned type); virtual void raise_HLDA(void); virtual void set_DRQ(unsigned channel, bx_bool val); -- 2.30.2